/*
 * acm1134.c
 *
 *  Created on: 28 Mar 2010
 *      Author: xuxu
 */

#include<stdio.h>
#include<stdlib.h>


int covert[2000],con;
int node[2000];
int n;

void check(int x)/*从根节点到叶子节点,深度优先依次把节点写入 covert 数组.*/
{
     covert[con++]=x;
     int i;
     for(i=0;i<n;i++)
	   if (node[i]==x)
	   {
			 check(i);
	   }
}


int main()
{
	int f,son;
	int s_count;
	int i;
	int result,guard[2000];
	int tmp[2000],t;
	while(scanf("%d",&n)!=EOF)
	{
		for(i=0;i<n;i++)
			node[i]=-1;
		memset(guard,0,sizeof(guard));
		con=n;
		t=0;
		while(con--)
		{
			scanf("%d:(%d)",&f,&s_count);
			for(i=0;i<s_count;i++)
			{
				scanf("%d",&son);
				node[son]=f;
			}
			if(0==s_count)
				tmp[t++]=f;
		}
		if(1==n)
		{
			printf("1\n");
			continue;
		}
		result=0;
/*		for(i=0;i<t;i++)
		{
			f=tmp[i];
			if(-1==node[f])
			{
				guard[f]=1;
				result++;
				continue;
			}
			while(node[f]!=-1)
			{
				if(!guard[f]&&!guard[node[f]])
				{
					guard[node[f]]=1;
					result++;
				}
				f=node[f];
			}
		}*/
		for(i=0;i<n;i++)
			if(-1==node[i])
				break;
		con=0;
		check(i);
		result=0;
		for(i=con-1;i>0;i--)
		{
			if(!guard[covert[i]]&&!guard[node[covert[i]]])
			{
				guard[node[covert[i]]]=1;
				result++;
			}
		}
		printf("%d\n",result);
	}
	return 0;
}
